<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    // 深拷贝
    const obj= {
        name: '张三',
        age: 18,
        address: {
            city: '北京'
        },
        arr: [1, 2, 3]
    }
    // 深拷贝
    function deepClone(obj) {
        // 判断是否是对象
        if (typeof obj !== 'object' || obj == null) {
            // obj是null,或者不是对象和数组,直接返回
            return obj
        }
        // 初始化返回结果
        let result
        if (obj instanceof Array) {
            result = []
        } else {
            result = {}
        }
        for (let key in obj) {
            // 保证key不是原型的属性
            if (obj.hasOwnProperty(key)) {
                // 递归调用
                result[key] = deepClone(obj[key])
            }
        }
        // 返回结果
        return result
    }
    
    
    
    // const obj2 = JSON.parse(JSON.stringify(obj))
    // obj2.address.city = '上海'
    // obj2.arr[0] = 4
    // console.log(obj)
    
    
    

    // function deepClone(obj) {
    //     // 如果是基本数据类型,直接返回
    //     if (typeof obj !== 'object') {
    //         return obj
    //     }
    //     // 如果是数组,创建一个新的数组,遍历数组,把数组中的每一项放到新数组中
    //     if (Array.isArray(obj)) {
    //         let newArr = []
    //         for (let i = 0; i < obj.length; i++) {
    //             newArr.push(deepClone(obj[i]))
    //         }
    //         return newArr
    //     }
    //     // 如果是对象,创建一个新的对象,遍历对象,把对象中的每一项放到新对象中
    //     if (obj instanceof Object) {
    //         let newObj = {}
    //         for (let key in obj) {
    //             newObj[key] = deepClone(obj[key])
    //         }
    //         return newObj
    //     }
    // }
    // const obj2 = deepClone(obj)
    // obj2.address.city = '上海'
    // console.log(obj)
</script>
</body>
</html>